/* 
1 页面加载的时候
  1 从缓存中获取购物车数据 渲染到页面中
    这些数据  checked=true 
2 微信支付
  1 哪些人 哪些帐号 可以实现微信支付
    1 企业帐号 
    2 企业帐号的小程序后台中 必须 给开发者 添加上白名单 
      1 一个 appid 可以同时绑定多个开发者
      2 这些开发者就可以公用这个appid 和 它的开发权限  
3 支付按钮
  1 先判断缓存中有没有token
  2 没有 跳转到授权页面 进行获取token 
  3 有token 。。。
  4 创建订单 获取订单编号
  5 已经完成了微信支付
  6 手动删除缓存中 已经被选中了的商品 
  7 删除后的购物车数据 填充回缓存
  8 再跳转页面 
 */
import {
  request
} from '../../request/index'
import regeneratorRuntime from '../../lib/runtime/runtime';
Page({

  /**
   * 页面的初始数据
   */
  data: {
    // 存储地址数据
    addressList: {},
    // 存储购物车列表
    cart: [],
    // 总价格
    totalPrice: 0,
    // 总数量
    totalNum: 0

  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {

  },
  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    // 监听获取地址按钮显示
    let address = wx.getStorageSync('address')
    // 获取本地存储
    let cart = wx.getStorageSync('carts') || []
    //判断全选按钮
    // every这个方法空数组也为true
    // let allChecked = cart.length > 0 ? cart.every(v => v.checked) : false

    // 过滤出选中的商品赋值给一个新数组
    cart = cart.filter(v => v.checked)
    this.setData({
      addressList: address
    })
    let totalPrice = 0
    let totalNum = 0
    cart.forEach(v => {
      // 判断复选框是否被选中
      totalPrice += v.goods_price * v.num
      totalNum += v.num
    })
    wx.setStorageSync('carts', cart)
    this.setData({
      cart,
      totalNum,
      totalPrice,
    })
  },
  // 支付
  async handleUserPay() {
    try {
      // 1 判断是否有token 没有跳转到授权页面
      let token = wx.getStorageSync('token')
      if (!token) {
        wx.navigateTo({
          url: '/pages/auth/auth'
        })
      }
      // 2 创建订单
      // 2.1 准备 请求头参数
      // const header = {
      //   Authorization: token
      // };
      // 2.2准备请求参数
      const order_price = this.data.totalPrice
      const consignee_addr = this.data.addressList.all
      const {
        cart
      } = this.data
      let goods = []
      cart.forEach(v => goods.push({
        goods_id: v.goods_id,
        goods_number: v.num,
        goods_price: v.goods_price
      }))
      // 请求参数
      const orderParams = {
        order_price,
        consignee_addr,
        goods
      }
      // 3 准备发送请求 创建订单 获取订单编号
      //由于权限原因 此处模拟获取，没有实际信息
      const {
        order_number
      } =
      await request({
        url: '/my/orders/create',
        method: 'post',
        data: orderParams
      })

      // 4 发送预支付接口
      // pay是一个对象，作为小程序支付接口的参数
      const {
        pay
      } = await request({
        url: '/my/orders/req_unifiedorder',
        method: 'post',
        data: {
          order_number
        }
      })
      //5 调用小程序支付接口
      wx.requestPayment({
        pay,
        async success() {
          // 6 查询支付订单结果 发起请求
          const res = await request({
            url: 'my/orders/chkOrder',
            method: 'post',
            data: {
              order_number
            }
          })

          //  支付成功弹出对话框
          wx.showToast({
            title: '支付成功',
            icon: 'success'
          })
          /* 
           8 手动删除缓存中已经支付过的商品
          */
          let newCart = wx.getStorageSync('carts')
          // 过滤出没有被支付过的
          newCart = newCart.filter(v => !v.checked)
          // 存入到缓存中
          wx.setStorageSync('carts', newCart)
          //7 跳转到订单页面
          wx.navigateTo({
            url: '/pages/order/order'
          })
        }
      })
    } catch (error) {
      // 支付失败
      wx.showToast({
        title: '支付失败',
        icon: 'error'
      })
      console.log(error);
    }
  }
})